/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * pnfSacarXIncindente.java
 *
 * Created on Nov 8, 2011, 9:29:00 PM
 */

package visual.Despacho;

import bentity.bePallet;
import bentity.beRack;
import bentity.beUbicacion;
import blogic.blIncidencia;
import blogic.blPallet;
import blogic.blProducto;
import blogic.blRack;
import blogic.blUbicacion;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import visual.Seguridad.visualHelper;
import bentity.beUsuario;
import blogic.blLog;

/**
 *
 * @author cesar
 */
public class pnfSacarXIncidente extends javax.swing.JPanel {
 public static String INCIDENTE = "Incidente";
 public  ArrayList<beUbicacion> ubicaciones = new ArrayList<beUbicacion>();
 private beUsuario usuario = null;
    /** Creates new form pnfSacarXIncindente */
    public pnfSacarXIncidente(beUsuario usuario) {
        this.usuario = usuario;
        initComponents();
        this.txtBusqUbicFila1.setTransferHandler(null);
        this.txtBusqUbicPiso1.setTransferHandler(null);
        this.txtBusqUbicRack1.setTransferHandler(null);
        this.txtBusqUbicUbicacion1.setTransferHandler(null);

        ConsultarXFiltros();

    }

      public void ConsultarXFiltros(){
        try {
            blPallet bp = new blPallet();
            blUbicacion bu = new blUbicacion();
            blProducto bpro = new blProducto();
            blRack br = new blRack();
            ArrayList<bePallet> pallets = new ArrayList<bePallet>();
            ArrayList<String> productos = new ArrayList<String>();
            ArrayList<beRack> racks = new ArrayList<beRack>();
            ArrayList<String> descripciones = new ArrayList<String>();
            pallets = bp.obtenerPalletUbiXInci(descripciones,ubicaciones);
            racks = new ArrayList<beRack>();
            racks = br.obtenerRacksXUbica(ubicaciones);
            if (pallets.size() > 0) {
               productos = bp.obtenerProdXPallet(pallets);
               DefaultTableModel dtm = (DefaultTableModel) this.tblPallets.getModel();
            this.limpiarTabla(dtm);
            if (pallets.size() == 0 || racks.size() == 0 || productos.size() == 0) {
                JOptionPane.showMessageDialog(this, "La búsqueda no arrojó resultados.", "Información", JOptionPane.INFORMATION_MESSAGE);
            } else {
                this.llenarTabla(pallets, racks, productos, ubicaciones,descripciones);
            }
            }
            else{
               JOptionPane.showMessageDialog(this, "No hay pallets asociados a una incidencia.", "Información", JOptionPane.INFORMATION_MESSAGE);
               DefaultTableModel dtm = (DefaultTableModel) this.tblPallets.getModel();
               this.limpiarTabla(dtm);
            }
        } catch (SQLException ex) {
            Logger.getLogger(pnfSacarXIncidente.class.getName()).log(Level.SEVERE, null, ex);
        }




    }

      private void llenarTabla(ArrayList<bePallet> pallets,ArrayList<beRack> racks,ArrayList<String> productos,ArrayList<beUbicacion> ubicaciones,ArrayList<String> descripciones) {
        DefaultTableModel dtm = (DefaultTableModel)this.tblPallets.getModel();
        Object [] datos = new Object [6];
        for(int i=0;i<pallets.size();i++){
            datos[0] = pallets.get(i).getId_Pallet();
            datos[1]= racks.get(i).getId_rack();
            String cad = "B"+racks.get(i).getNumRack()+"-F"+racks.get(i).getNumFila()+"-P"+ubicaciones.get(i).getNumPiso()+"-C"+ubicaciones.get(i).getNumUbicacion()+"";
            datos[2] = cad;
            datos[3] = productos.get(i);
            datos[4]= ubicaciones.get(i).getId_ubicacion();
            datos[5] = descripciones.get(i);
            dtm.addRow(datos);
        }
        this.tblPallets.setRowSelectionAllowed(true);
        this.tblPallets.setColumnSelectionAllowed(false);
    }

    private void limpiarTabla(DefaultTableModel dtm) {
        int numFilas = dtm.getRowCount();
        for(int i=(numFilas-1);i>=0;i--)
            dtm.removeRow(i);
    }
    // <editor-fold defaultstate="collapsed" desc="Generated Code">


    
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane2 = new javax.swing.JScrollPane();
        tblPallets = new javax.swing.JTable();
        btnSeleccionar = new javax.swing.JButton();
        lblTitulo = new javax.swing.JLabel();
        pnlBusqueda1 = new javax.swing.JPanel();
        lblBusqUbicFila1 = new javax.swing.JLabel();
        lblBusqUbicRack1 = new javax.swing.JLabel();
        lblBusqUbicPiso1 = new javax.swing.JLabel();
        txtBusqUbicPiso1 = new javax.swing.JTextField();
        lblBusqUbicUbicacion1 = new javax.swing.JLabel();
        txtBusqUbicUbicacion1 = new javax.swing.JTextField();
        txtBusqUbicRack1 = new javax.swing.JTextField();
        btnBuscar = new javax.swing.JButton();
        btnLimpiar1 = new javax.swing.JButton();
        lblBusqUbicCodigo2 = new javax.swing.JLabel();
        txtBusqUbicFila1 = new javax.swing.JTextField();
        lblTitulo1 = new javax.swing.JLabel();

        setLayout(null);

        tblPallets.setAutoCreateRowSorter(true);
        tblPallets.setForeground(new java.awt.Color(0, 0, 0));
        tblPallets.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "CodPallet", "CodRack", "Coordenada", "Producto", "CodUbi", "Descripcion"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tblPallets.setColumnSelectionAllowed(true);
        tblPallets.setGridColor(javax.swing.UIManager.getDefaults().getColor("TableHeader.background"));
        tblPallets.setMaximumSize(new java.awt.Dimension(800, 72));
        tblPallets.setMinimumSize(new java.awt.Dimension(200, 72));
        tblPallets.setSelectionForeground(new java.awt.Color(0, 0, 0));
        tblPallets.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        tblPallets.getTableHeader().setReorderingAllowed(false);
        jScrollPane2.setViewportView(tblPallets);
        tblPallets.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        tblPallets.getColumnModel().getColumn(2).setResizable(false);

        add(jScrollPane2);
        jScrollPane2.setBounds(50, 190, 757, 174);

        btnSeleccionar.setBackground(new java.awt.Color(240, 235, 226));
        btnSeleccionar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnSeleccionar.setForeground(new java.awt.Color(0, 0, 0));
        btnSeleccionar.setText("Liberar");
        btnSeleccionar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSeleccionarActionPerformed(evt);
            }
        });
        add(btnSeleccionar);
        btnSeleccionar.setBounds(390, 380, 120, 27);

        lblTitulo.setFont(new java.awt.Font("DejaVu Sans", 0, 36));
        lblTitulo.setForeground(new java.awt.Color(0, 0, 0));
        lblTitulo.setText("Salida por incidencia");
        add(lblTitulo);
        lblTitulo.setBounds(260, 10, 390, 43);

        pnlBusqueda1.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Busqueda", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 14))); // NOI18N
        pnlBusqueda1.setLayout(null);

        lblBusqUbicFila1.setFont(new java.awt.Font("Dialog", 0, 12));
        lblBusqUbicFila1.setForeground(new java.awt.Color(0, 0, 0));
        lblBusqUbicFila1.setText("B");
        pnlBusqueda1.add(lblBusqUbicFila1);
        lblBusqUbicFila1.setBounds(140, 30, 20, 20);

        lblBusqUbicRack1.setFont(new java.awt.Font("Dialog", 0, 12));
        lblBusqUbicRack1.setForeground(new java.awt.Color(0, 0, 0));
        lblBusqUbicRack1.setText("-F");
        pnlBusqueda1.add(lblBusqUbicRack1);
        lblBusqUbicRack1.setBounds(200, 30, 20, 20);

        lblBusqUbicPiso1.setFont(new java.awt.Font("Dialog", 0, 12));
        lblBusqUbicPiso1.setForeground(new java.awt.Color(0, 0, 0));
        lblBusqUbicPiso1.setText("-P");
        pnlBusqueda1.add(lblBusqUbicPiso1);
        lblBusqUbicPiso1.setBounds(260, 30, 20, 20);

        txtBusqUbicPiso1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtBusqUbicPiso1KeyTyped(evt);
            }
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtBusqUbicPiso1KeyPressed(evt);
            }
        });
        pnlBusqueda1.add(txtBusqUbicPiso1);
        txtBusqUbicPiso1.setBounds(280, 30, 30, 28);

        lblBusqUbicUbicacion1.setFont(new java.awt.Font("Dialog", 0, 12));
        lblBusqUbicUbicacion1.setForeground(new java.awt.Color(0, 0, 0));
        lblBusqUbicUbicacion1.setText("-C");
        pnlBusqueda1.add(lblBusqUbicUbicacion1);
        lblBusqUbicUbicacion1.setBounds(320, 30, 20, 20);

        txtBusqUbicUbicacion1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtBusqUbicUbicacion1KeyTyped(evt);
            }
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtBusqUbicUbicacion1KeyPressed(evt);
            }
        });
        pnlBusqueda1.add(txtBusqUbicUbicacion1);
        txtBusqUbicUbicacion1.setBounds(340, 30, 30, 28);

        txtBusqUbicRack1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtBusqUbicRack1KeyTyped(evt);
            }
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtBusqUbicRack1KeyPressed(evt);
            }
        });
        pnlBusqueda1.add(txtBusqUbicRack1);
        txtBusqUbicRack1.setBounds(160, 30, 30, 28);

        btnBuscar.setBackground(new java.awt.Color(240, 235, 226));
        btnBuscar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnBuscar.setForeground(new java.awt.Color(0, 0, 0));
        btnBuscar.setText("Buscar");
        btnBuscar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBuscarActionPerformed(evt);
            }
        });
        pnlBusqueda1.add(btnBuscar);
        btnBuscar.setBounds(400, 30, 120, 27);

        btnLimpiar1.setBackground(new java.awt.Color(240, 235, 226));
        btnLimpiar1.setFont(new java.awt.Font("Dialog", 0, 12));
        btnLimpiar1.setForeground(new java.awt.Color(0, 0, 0));
        btnLimpiar1.setText("Limpiar");
        btnLimpiar1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnLimpiar1ActionPerformed(evt);
            }
        });
        pnlBusqueda1.add(btnLimpiar1);
        btnLimpiar1.setBounds(550, 30, 110, 27);

        lblBusqUbicCodigo2.setFont(new java.awt.Font("Dialog", 0, 12));
        lblBusqUbicCodigo2.setForeground(new java.awt.Color(0, 0, 0));
        lblBusqUbicCodigo2.setText("Codigo");
        pnlBusqueda1.add(lblBusqUbicCodigo2);
        lblBusqUbicCodigo2.setBounds(60, 30, 60, 15);

        txtBusqUbicFila1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtBusqUbicFila1KeyTyped(evt);
            }
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtBusqUbicFila1KeyPressed(evt);
            }
        });
        pnlBusqueda1.add(txtBusqUbicFila1);
        txtBusqUbicFila1.setBounds(220, 30, 30, 28);

        add(pnlBusqueda1);
        pnlBusqueda1.setBounds(50, 70, 760, 80);

        lblTitulo1.setFont(new java.awt.Font("DejaVu Sans", 0, 14));
        lblTitulo1.setForeground(new java.awt.Color(0, 0, 0));
        lblTitulo1.setText("Pallets");
        add(lblTitulo1);
        lblTitulo1.setBounds(50, 160, 45, 17);
    }// </editor-fold>//GEN-END:initComponents

    private void btnSeleccionarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSeleccionarActionPerformed
        // TODO add your handling code here:
        int rslt = visualHelper.mostrarPreguntaSiNo("¿Está seguro de liberar la ubicación seleccionada?");
        if (rslt == JOptionPane.YES_OPTION){
            blUbicacion ubi = new blUbicacion();
            blProducto prod = new blProducto();
            int fila = this.tblPallets.getSelectedRow();
            ArrayList<Integer> estados = new ArrayList<Integer>();
            ArrayList<bePallet> pallets = new ArrayList<bePallet>();
            if (fila == -1)
                JOptionPane.showMessageDialog(this, "Debe seleccionar una ubicacion.", "Información", JOptionPane.INFORMATION_MESSAGE);
            else{
                try {
                    if (this.tblPallets.getSelectedRowCount() > 1) {
                        visualHelper.mostrarMensajeAdvertencia("Debe seleccionar una sola fila");
                    }
                    estados = ubi.getTipoEstadoInt();
                    //prod.actualizarStock(Integer.parseInt(this.tblPallets.getValueAt(fila, 0).toString()),INCIDENTE);
                    //ubi.liberarPalletXIncidente()
                    bePallet p = new bePallet();
                    blPallet pallet = new blPallet();
                    int cantCajas = pallet.obtenerCajas(Integer.parseInt(this.tblPallets.getValueAt(fila, 0).toString()));
                    p.setId_Pallet(Integer.parseInt(this.tblPallets.getValueAt(fila, 0).toString()));
                    p.setCantCajas(cantCajas);
                    pallets.add(p);
                    pallet.actualizarStock(pallets);
                    ubi.actualizarUbi(Integer.parseInt(this.tblPallets.getValueAt(fila, 4).toString()), Integer.parseInt(this.tblPallets.getValueAt(fila, 0).toString()), estados.get(3),INCIDENTE);
                    visualHelper.mostrarMensajeSatisfaccion("Se libero la ubicacion");
                    String codUbicacion = this.tblPallets.getValueAt(fila, 2).toString();
                    (new blLog()).registrarLog(this.usuario.getIdUsuario(), this.usuario.getCargo(), "La ubicacion  "+ codUbicacion + " ha sido liberada por incidente");
                    blIncidencia i = new blIncidencia();
                    i.eliminarI(Integer.parseInt(this.tblPallets.getValueAt(fila, 0).toString()),ubicaciones.get(fila).getId_incidente());;
                    ConsultarXFiltros();
                } catch (Exception ex) {
                    Logger.getLogger(pnfSacarXIncidente.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }


    }//GEN-LAST:event_btnSeleccionarActionPerformed

    private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBuscarActionPerformed
        // TODO add your handling code here:
        this.consultarUbicacionesPorFiltros();

    }//GEN-LAST:event_btnBuscarActionPerformed

    private void consultarUbicacionesPorFiltros(){
        try {
            blPallet bp = new blPallet();
            String strFila =this.txtBusqUbicFila1.getText();
            String strRack = this.txtBusqUbicRack1.getText();
            String strPiso = this.txtBusqUbicPiso1.getText();
            String strUbi = this.txtBusqUbicUbicacion1.getText();
            blUbicacion bu = new blUbicacion();
            blProducto bpro = new blProducto();
            blRack br = new blRack();
            ArrayList<bePallet> pallets = new ArrayList<bePallet>();
            ArrayList<String> productos = new ArrayList<String>();
            ArrayList<beUbicacion> ubicacionesIncidentes = new ArrayList<beUbicacion>();
            ArrayList<beRack> racks = new ArrayList<beRack>();
            ArrayList<String> descripciones = new ArrayList<String>();
            pallets = bp.obtenerPalletUbiXInci(descripciones,ubicacionesIncidentes,strFila,strRack,strPiso,strUbi);
            racks = new ArrayList<beRack>();
            racks = br.obtenerRacksXUbica(ubicacionesIncidentes);
            if (pallets.size() > 0) {
               productos = bp.obtenerProdXPallet(pallets);
               DefaultTableModel dtm = (DefaultTableModel) this.tblPallets.getModel();
            this.limpiarTabla(dtm);
            if (pallets.size() == 0 || racks.size() == 0 || productos.size() == 0) {
                JOptionPane.showMessageDialog(this, "La búsqueda no arrojó resultados.", "Información", JOptionPane.INFORMATION_MESSAGE);
            } else {
                this.llenarTabla(pallets, racks, productos, ubicacionesIncidentes,descripciones);
            }
            }
            else{
               JOptionPane.showMessageDialog(this, "No hay pallets asociados a una incidencia.", "Información", JOptionPane.INFORMATION_MESSAGE);
               DefaultTableModel dtm = (DefaultTableModel) this.tblPallets.getModel();
               this.limpiarTabla(dtm);
            }
        } catch (SQLException ex) {
            Logger.getLogger(pnfSacarXIncidente.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
    private void btnLimpiar1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLimpiar1ActionPerformed
        // TODO add your handling code here:

        this.txtBusqUbicFila1.setText("");
        this.txtBusqUbicPiso1.setText("");
        this.txtBusqUbicRack1.setText("");
        this.txtBusqUbicUbicacion1.setText("");
    }//GEN-LAST:event_btnLimpiar1ActionPerformed

    private void txtBusqUbicUbicacion1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtBusqUbicUbicacion1KeyPressed
        // TODO add your handling code here:
        visualHelper.controlarTamanho(evt, 5, txtBusqUbicUbicacion1);
        //this.consultarUbicacionesPorFiltros();
        
    }//GEN-LAST:event_txtBusqUbicUbicacion1KeyPressed

    private void txtBusqUbicPiso1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtBusqUbicPiso1KeyPressed
        // TODO add your handling code here:
        visualHelper.controlarTamanho(evt, 5, txtBusqUbicPiso1);
       
      
    }//GEN-LAST:event_txtBusqUbicPiso1KeyPressed

    private void txtBusqUbicRack1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtBusqUbicRack1KeyPressed
        // TODO add your handling code here:
        visualHelper.controlarTamanho(evt, 5, txtBusqUbicRack1);
        //this.consultarUbicacionesPorFiltros();
        
    }//GEN-LAST:event_txtBusqUbicRack1KeyPressed

    private void txtBusqUbicFila1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtBusqUbicFila1KeyPressed
        // TODO add your handling code here:
        visualHelper.controlarTamanho(evt, 5, txtBusqUbicFila1);
       // this.consultarUbicacionesPorFiltros();

    }//GEN-LAST:event_txtBusqUbicFila1KeyPressed

    private void txtBusqUbicUbicacion1KeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtBusqUbicUbicacion1KeyTyped
        // TODO add your handling code here:
        visualHelper.soloDigitosEnTextField(evt);
        //this.consultarUbicacionesPorFiltros();
        
    }//GEN-LAST:event_txtBusqUbicUbicacion1KeyTyped

    private void txtBusqUbicPiso1KeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtBusqUbicPiso1KeyTyped
        // TODO add your handling code here:
        visualHelper.soloDigitosEnTextField(evt);
      
    }//GEN-LAST:event_txtBusqUbicPiso1KeyTyped

    private void txtBusqUbicRack1KeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtBusqUbicRack1KeyTyped
        // TODO add your handling code here:
        visualHelper.soloDigitosEnTextField(evt);
        
    }//GEN-LAST:event_txtBusqUbicRack1KeyTyped

    private void txtBusqUbicFila1KeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtBusqUbicFila1KeyTyped
        // TODO add your handling code here:
        visualHelper.soloDigitosEnTextField(evt);
        
    }//GEN-LAST:event_txtBusqUbicFila1KeyTyped


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnBuscar;
    private javax.swing.JButton btnLimpiar1;
    private javax.swing.JButton btnSeleccionar;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JLabel lblBusqUbicCodigo2;
    private javax.swing.JLabel lblBusqUbicFila1;
    private javax.swing.JLabel lblBusqUbicPiso1;
    private javax.swing.JLabel lblBusqUbicRack1;
    private javax.swing.JLabel lblBusqUbicUbicacion1;
    private javax.swing.JLabel lblTitulo;
    private javax.swing.JLabel lblTitulo1;
    private javax.swing.JPanel pnlBusqueda1;
    private javax.swing.JTable tblPallets;
    private javax.swing.JTextField txtBusqUbicFila1;
    private javax.swing.JTextField txtBusqUbicPiso1;
    private javax.swing.JTextField txtBusqUbicRack1;
    private javax.swing.JTextField txtBusqUbicUbicacion1;
    // End of variables declaration//GEN-END:variables

}
